home *** CD-ROM | disk | FTP | other *** search
Text File | 1990-07-18 | 1.1 KB | 62 lines | [TEXT/PICN] |
- # Concordance program using sets
-
- global uses, lineno, width
-
- procedure main(args)
- local word, line
-
- width := 15 # width of word field
- uses := table()
- lineno := 0
-
- every tabulate(words()) # tabulate all the citations
-
- output() # print the citations
-
- end
-
- # Add line number to citations for word
- #
- procedure tabulate(word)
-
- /uses[word] := table()
- uses[word][lineno] := 1
- return
-
- end
-
- # Generate words
- #
- procedure words()
- local s, line
-
- while line := read() do {
- lineno +:= 1
- write(right(lineno,6)," ",line)
- map(line) ? while tab(upto(&letters)) do {
- s := tab(many(&letters))
- if *s < 3 then next # skip short words
- suspend s
- }
- }
-
- end
-
- # Print the results
- #
- procedure output()
- local word, line, numbers
-
- write()
-
- uses := sort(uses,3) # sort citations
- while word := get(uses) do {
- line := ""
- numbers := sort(get(uses),3)
- while line ||:= get(numbers) || ", " do
- get(numbers) # skip marking value
- write(left(word,width),line[1:-2])
- }
-
- end
-